// 定义速度范围和颜色数量
const minSpeed = 0;
const maxSpeed = 120;
const speedStep = 5;
const totalSteps = Math.ceil((maxSpeed - minSpeed) / speedStep);

// 生成渐变色
function generateGradientColors() {
    const startHue = 240; // 起始色相（深蓝色）
    const endHue = 0; // 结束色相（红色）
    const colors = [];
    for (let i = 0; i < totalSteps; i++) {
        const hue = startHue - (startHue - endHue) * (i / totalSteps);
        const color = `hsl(${hue}, 100%, 50%)`;
        colors.push(color);
    }
    // 为爆表速度添加颜色
    colors.push("hsl(300, 100%, 50%)");
    return colors;
}

// 生成速度区间和颜色映射表
function generateSpeedColorMap() {
    const colors = generateGradientColors();
    const speedColorMap = [];
    for (let i = 0; i < totalSteps; i++) {
        const min = minSpeed + i * speedStep;
        const max = min + speedStep;
        speedColorMap.push({
            minSpeed: min,
            maxSpeed: max,
            color: colors[i]
        });
    }
    // 添加爆表速度区间
    speedColorMap.push({
        minSpeed: maxSpeed,
        maxSpeed: Infinity,
        color: colors[totalSteps]
    });
    return speedColorMap;
}

const speedColorMap = generateSpeedColorMap();

/**
 * 根据速度值获取对应的颜色
 * @param {number} speed - 速度值
 * @returns {string} - 对应的十六进制颜色代码，如果没有匹配到则返回默认颜色 "#808080"
 */
function getColorBySpeed(speed) {
    for (let i = 0; i < speedColorMap.length; i++) {
        const { minSpeed, maxSpeed, color } = speedColorMap[i];
        if (speed >= minSpeed && speed < maxSpeed) {
            return color;
        }
    }
    // 如果没有匹配到任何区间，返回默认颜色（这里返回灰色）
    return "#808080";
}

export { getColorBySpeed };